package view;

import dao.UserDAO;
import model.Admin;
import model.User;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

/**
 * 用户管理界面类，提供用户管理功能
 */
public class UserManageFrame extends JFrame {
    private UserDAO userDAO;             // 用户数据访问对象
    private JTable userTable;            // 用户表格
    private DefaultTableModel tableModel; // 表格模型
    private JButton disableButton;       // 禁用用户按钮
    private JButton backButton;          // 返回按钮

    /**
     * 构造方法，初始化用户管理界面
     */
    public UserManageFrame() {
        userDAO = new UserDAO();

        // 设置窗口标题和大小
        setTitle("在线购物系统 - 用户管理");
        setSize(800, 600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        // 创建面板并设置布局
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

        // 创建表格模型
        tableModel = new DefaultTableModel();
        tableModel.addColumn("用户ID");
        tableModel.addColumn("用户名");
        tableModel.addColumn("邮箱");
        tableModel.addColumn("电话");
        tableModel.addColumn("状态");

        // 创建用户表格并设置表格模型
        userTable = new JTable(tableModel);
        userTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

        // 加载用户数据到表格
        loadUsers();

        // 创建表格滚动面板
        JScrollPane scrollPane = new JScrollPane(userTable);

        // 创建按钮面板并设置布局
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));

        // 创建禁用用户按钮并添加事件监听器
        disableButton = new JButton("禁用用户");
        disableButton.setPreferredSize(new Dimension(100, 30));
        disableButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int selectedRow = userTable.getSelectedRow();
                if (selectedRow == -1) {
                    JOptionPane.showMessageDialog(UserManageFrame.this, "请先选择要禁用的用户！", "错误", JOptionPane.ERROR_MESSAGE);
                    return;
                }

                int userId = (Integer) userTable.getValueAt(selectedRow, 0);

                // 禁用用户
                userDAO.disableUser(userId);

                // 禁用成功提示
                JOptionPane.showMessageDialog(UserManageFrame.this, "用户账号禁用成功！", "成功", JOptionPane.INFORMATION_MESSAGE);

                // 刷新用户列表
                loadUsers();
            }
        });

        // 创建返回按钮并添加事件监听器
        backButton = new JButton("返回");
        backButton.setPreferredSize(new Dimension(100, 30));
        backButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 关闭用户管理界面，返回管理员主界面
                dispose();
                new AdminMainFrame(new Admin()); // 这里需要传递当前登录的管理员对象
            }
        });

        // 将按钮添加到按钮面板
        buttonPanel.add(disableButton);
        buttonPanel.add(backButton);

        // 将表格滚动面板和按钮面板添加到面板
        panel.add(scrollPane, BorderLayout.CENTER);
        panel.add(buttonPanel, BorderLayout.SOUTH);

        // 将面板添加到窗口
        add(panel);

        // 显示用户管理界面
        setVisible(true);
    }

    /**
     * 加载用户数据到表格
     */
    private void loadUsers() {
        // 清空表格
        tableModel.setRowCount(0);

        // 获取所有用户
        List<User> users = userDAO.getAllUsers();

        // 将用户数据添加到表格
        for (User user : users) {
            Object[] row = {
                    user.getUserId(),
                    user.getUsername(),
                    user.getEmail(),
                    user.getPhone(),
                    user.getStatus() // 假设用户类中有一个 getStatus() 方法返回用户状态
            };
            tableModel.addRow(row);
        }
    }
}